﻿/**
	@file	Block.h
	@date	2013/1/12
	@author	김진식(jeensig@gmail.com)
	@brief	블럭
*/

#ifndef _BLOCK_H_
#define _BLOCK_H_

#include <vector>
#include <Windows.h>
#include "Position.h"


/**
	@class	Block
	@date	2013/1/28
	@author	김진식(jeensig@gmail.com)
	@brief	블럭
*/
class Block
{
public:
	enum BLOCK_SHAPE { BOX = 0, LINE };
	enum DIRECTION { LEFT = 1, RIGHT, DOWN };
	enum UPDATEBLOCK { NONE = 0, LINECHECK, GAMEOVER };

	Block();
	~Block();

	void Init(); ///< 블럭의 초기화
	void Render(); ///< 블럭 렌더
	int Update(); ///< 블럭 업데이트

	void InputKey(int key); ///< 키 입력을 처리한다.

private:
	typedef std::vector< std::vector<Position> > BLOCK_POSITION;
	BLOCK_POSITION block_; ///< 블럭들의 위치

	void RandomShape(); ///< 랜덤으로 Shape 설정
	int MoveToBlock(DIRECTION direction); ///< 블럭을 움직인다.(방향)
	void RotateBlock();

	bool IsCollision(); ///< 충돌이 났는지 판별한다

	int lotate_; ///< 블럭의 회전 모양 번호
	Position head_; ///< 블럭 머리의 위치
	BLOCK_SHAPE shape_; ///< 자신이 어떤 블럭인지를 표시
};

#endif